﻿// -----------------------------------------------------------------------
// <copyright file="Calculator.cs" company="Microsoft">
// TODO: Update copyright text.
// </copyright>
// -----------------------------------------------------------------------

namespace Cspl.Calculator.Lib
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Cspl.Calculator.Lib.Interface;
    using Cspl.Calculator.Lib.Model;

    /// <summary>
    /// TODO: Update summary.
    /// </summary>
    public class MainCalculator
    {
        #region Private Fields

        private IBasicCalculator _calculator;
        private CalModel _data;

        #endregion

        #region Contructors

        public MainCalculator()
        {
            this._calculator = new BasicCalculator();
        }

        #endregion

        #region Properties

        public CalModel Data
        {
            get { return _data; }
            set { _data = value; }
        }

        #endregion

        #region Methods

        public int Calculate()
        {
            int result = 0;
            if (this.Data != null)
            {
                if (this.Data.Mode == CalMode.Single)
                {
                    switch (this.Data.Operation)
                    {
                        case CalOperations.Add:
                            result = this._calculator.Add(this.Data.IntegerValue1,
                                    this.Data.IntegerValue2);
                            break;
                        case CalOperations.Sub:
                            result = this._calculator.Sub(this.Data.IntegerValue1,
                                this.Data.IntegerValue2);
                            break;
                        case CalOperations.Mul:
                            result = this._calculator.Mul(this.Data.IntegerValue1,
                                this.Data.IntegerValue2);
                            break;
                        case CalOperations.Div:
                            result = this._calculator.Div(this.Data.IntegerValue1,
                                this.Data.IntegerValue2);
                            break;
                    }
                }
                else
                {
                    result = this._calculator.ComplexListOperation(this.Data.ListOfIntegerValue,
                        this.Data.Operation);
                }
            }
            else
            {
                Console.WriteLine("There is no data to be calculated!");
            }

            return result;
        }

        #endregion
    }

    public enum CalOperations { Add, Mul, Div, Sub }
    public enum CalMode { Single, List }
}
